本篇文章同時刊載於Andy's Blog
上一篇文章中我們介紹了Vue的生命週期,了解Vue背後是如何把資料渲染到畫面上,也知道如何在不同life hook階段,針對資料進行操控。
而今天這篇文章將介紹Vue的模板語法,讓我們可以開始將Vue Instance(Vue實體)中的資料變化,順利渲染到畫面上。
模板語法是
邏輯
跟頁面
之間溝通的媒介
Vue.js 使用了基於HTML 的模板語法,允許開發者聲明式(declaratively)地將DOM 綁定至底層Vue 實例的數據。官網介紹
1.插值 Mustache語法
2.指令 如:v-bind、v-on、v-model、v-for
寫法:使用Mustache語法
(就是雙大括號)
<span>Message: {{ msg }}</span>
補充:若希望文字能單次綁定 只要加上`v-once`即可,之後再變更實體內msg文字內容畫面也不會改變
<span v-once >Message: {{ msg }}</span>
1.必須使用表達式(expression)。簡單來說表達式就是要能產生一個值(或是一個結果)
範例如下:
{{ rawHtml + text + (number1+number2) }}
{{ number1+number2 }}
{{ text.split('').reverse().join('') }}
{{ ok ? 'Yes': 'No'}}
有個限制,每個綁定都只能包含單個表達式,所以下面的例子都不會生效。
<!-- 这是语句,不是表达式 -->
{{ var a = 1 }}
<!-- 流控制也不会生效,请使用三元表达式 -->
{{ if (ok) { return message } }}
V-text插入:渲染純文字內容
V-html:插入整個html結構
V-once:將 data 內的內容渲染後,不再追蹤其變化
<div v-html="rawHTML"></div>
<hr>
<div v-once>msg with v-once: {{ msg }}</div>
<hr>
<div v-text="msg"></div>
<div id="app2">
<!-- 範例1 -->
<!-- <p>{{test}}</p> -->
<!-- 範例2、3 -->
<p>{{item.text}}</p>
<button class="btn btn-primary " type="button" @click="updateText">點擊</button>
</div>
var app1 =new Vue({
el:"#app2",
//data必須是一個物件
data:{
item:{
}
},
methods:{
updateText(){
//範例1
//Vue不允許動態添加root屬性value值
this.test='無法動態添加屬性';
console.log(this.test);
//範例2 若沒有先宣告資料 則無法同時雙向綁定
// this.item.text ='這是一個無法同時綁定的文字'
// console.log(this.item);
//範例3 強制綁定
//(目標/屬性/值)
// this.$set(this.item,'text','這是一個強制雙向綁定')
// console.log(this.item);
}
}
})
console.log(app1);
指令是Vue 所提供特殊的 DOM 屬性, Vue 內建的指令通常會以「 v- 」作為開頭。
指令中的「值」通常⽤來表⽰某個 JS 運算式。而指令的作用,是將某個運算式執⾏後的結果回饋到對應的 DOM 上。
寫法:v-html
<h4 class="mt-3">原始 HTML</h4>
{{ rawHtml }}
<p v-html="rawHtml">這邊會渲染出原始 HTML 結構</p>
補充:
網站上動態渲染的任意HTML可能會非常危險,因為它很容易導致XSS攻擊
不建議使用地方:使用者輸入框、密碼欄位等
詳細說明請參考:https://cn.vuejs.org/v2/api/#v-html
寫法:使用v-bind綁定,新增屬性如id、href
<h4 class="mt-3" v-bind:id="htmlId">HTML 屬性</h4>
Vue2.6版本新增
<div id="app">
<a v-bind:[attributeName]="url"> ... </a>
</div>
說明:如果Vue實體內有一個data屬性attributeName,其值為"href",那麼這個綁定等同v-bind:href
參考資料
使用.
當作修飾符
<a v-on:submit.prevent="onSubmit">...</a>
說明:.prevent修飾符
等同告訴v-on指令對於觸發的事件使用event.preventDefault()
官網--修飾符介紹
Vue 的修飾⼦最主要分成兩種:表單元素的修飾⼦
與 事件的修飾⼦
。
修飾符目的:
用來增強指令 (directive) 附加功能的語法糖。
寫法介紹:v-xxx 的指令後加上「 .xxx 」
而修飾符依照種類可以區分下面幾種:
表單修飾符:
.lazy(不會即時更新input)、
.number(將input輸入資料轉為數值)、
.trim(去除首尾空白字符)
<p>lazy修飾符示範</p>
<div>msg: {{ msg }}</div>
<input type="text" v-model.lazy="msg">
事件修飾符:codepen範例原始碼,範例將示範如何翻轉字串
HTML部分
<div id="app">
<input type="text" class="form-control" v-model="text" @keyup.enter="reverseText">
<a href="http://www.google.com" @click.prevent="reverseText" class="btn btn-primary mt-1">反轉字串</a>
<ul>
<li class="mt-3" v-for="item in content">
{{ item.title }}
</li>
</ul>
</div>
JavaScript部分
var app = new Vue({
el: '#app',
data: {
text: '',
newText:'',
//儲存newText資料
content: [
// {
// title:'',
// }
],
},
// 請在此撰寫 JavaScript
methods: {
reverseText:function() {
// event.preventDefault();
this.newText= this.text.split('').reverse().join('');
this.content.push(
{
title: this.newText,
}
)
this.text =''; //清空資料
}
}
});
注意縮寫時候,
v-on:
可以全部取代為@
參考資料:
Vue.js官網教學
Vue api 指令介紹
Vue.js Core 30天屠龍記(第5天): 模板語法 Part 1 - Mustache 標籤
明天將介紹Vue.js中很常使用的指令v-on
、v-model
,那我們就明天見拉~
Hi 非常感謝分享,
針對 動態新增參數 的部分那裡還是不太懂,我去查看 Vue Document 只有查到
Dynamic Components 而已。
請問大大能提供更多線索讓我查找資料嗎?謝謝!